Crear un Local Repository para ISOS en XenServer 6.5


La instalación de XenServer se realiza en una partición de 4GB. XenServer crea una segunda partición de 4GB, pero el resto del disco no se usa.

En la primera instalación que intenté, con un solo disco de 1TB, pude convertir el espacio restante en un Storage Repository (SR) local para almacenamiento de las máquinas virtuales. Sin embargo, me quedé sin espacio para poder crear un  SR de ISOs...

Así que en el segundo intento, con dos discos, durante la instalación marqué el disco de 1TB para el almacenamiento de las máquinas virtuales. Decidí utilizar el espacio restante en el primer disco (de 250GB), con sólo 8GB usados, para almacenar las ISOs.

Al buscar cómo crear el SR para las ISOs, una de las entradas que suelen aparecer es How to Create a Local Storage Repository. Pero el artículo -al menos a mí- me parece confuso y parece apuntar a almacenamiento SCSI... Total, que no me servía... Otros artículos indican un método que crea el SR en la partición de boot y en los comentarios siempre aparce quien indica que al subir la segunda ISO se han quedado sin espacio.

El artículo con las instrucciones que me funcionaron fue Create local ISO Storage in XenServer from remaining space on boot Disk.

Al final, estuve capturando todo el proceso, comando a comando en un "bloc de notas" y así lo reproduzco ahora, por si puede servir de ayuda a alguien.

El escenario es el siguiente:

El equipo tiene dos discos duros (locales):
  • /dev/sda : 1TB
  • /dev/sdb : 250GB
El disco de sistema, donde está instalado XenServer (6.5) es el disco de 250GB. El disco de 1TB, durante la instalación, lo he marcado como almacenaje local para las máquinas virtuales gestionadas por XenServer.

El reto es usar els 242GB (aprox) libres del disco de 250GB para almacenar ISOs después de que la instalación cree dos particiones de 4GB:

 En primer lugar, empezamos lanzando fdisk -l para obtener las particiones del disco. El comando muestra algunos avisos, ya que no soporta GPT:

[root@LAB ~]# fdisk -l

WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sda: 960.1 GB, 960197124096 bytes
255 heads, 63 sectors/track, 116737 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sda doesn't contain a valid partition table

WARNING: GPT (GUID Partition Table) detected on '/dev/sdb'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/sdb: 250.0 GB, 250059350016 bytes
256 heads, 63 sectors/track, 30282 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1       30283   244198583+  ee  EFI GPT
[root@LAB ~]#


El comando que sí soporta GPT, es gdisk. Lo lanzamos sobre el disco /dev/sdb (el de 250GB), que es el que me interesa:

[root@LAB ~]# gdisk /dev/sdb -l
GPT fdisk (gdisk) version 0.6.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 488397168 sectors, 232.9 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): CA68F231-D745-4BD7-A9E2-D3C53B7B63CB
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 488397134
Partitions will be aligned on 2048-sector boundaries
Total free space is 471623913 sectors (224.9 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         8388641   4.0 GiB     0700
   2         8390656        16777249   4.0 GiB     0700
[root@LAB ~]#


Como se muestra en la imagen de más arriba, tenemos dos particiones de 4GB y un montón de espacio libre sin particionar.

Como no está particionado, lanzamos gdisk /dev/sdb para crear una nueva partición en este espacio libre:

[root@LAB ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.6.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help):


Pulsamos ? para obtener la lista de opciones disponibles:

Command (? for help): ?
b       back up GPT data to a file
c       change a partition's name
d       delete a partition
i       show detailed information on a partition
l       list known partition types
n       add a new partition
o       create a new empty GUID partition table (GPT)
p       print the partition table
q       quit without saving changes
r       recovery and transformation options (experts only)
s       sort partitions
t       change a partition's type code
v       verify disk
w       write table to disk and exit
x       extra functionality (experts only)
?       print this menu

Command (? for help):


Queremos crear una nueva partición en el espacio no usado, así que seleccionamos n.  Aceptaremos todos los valores por defecto.

Primero nos pide el número de partición. Como ya tenemos dos, la partición será la número 3.
A continuación nos pide el sector inicial y final de la partición y al final, el tipo de sistema de ficheros que va a contener la partición.  Por defecto nos ofrece 0700, que corresponde a Linux/Windows Data y que coincide con el formato de las dos particiones presentes en sdb, así que aceptamos el valor por defecto.

Command (? for help): n
Partition number (3-128, default 3): 3
First sector (34-488397134, default = 16777250) or {+-}size{KMGT}:
Information: Moved requested sector from 16777250 to 16779264 in
order to align on 2048-sector boundaries.
Use 'l' on the experts' menu to adjust alignment
Last sector (16779264-488397134, default = 488397134) or {+-}size{KMGT}:
Current type is 'Linux/Windows data'
Hex code (L to show codes, 0 to enter raw code, Enter = 0700):
Changed type of partition to 'Linux/Windows data'

Command (? for help):


Por claridad,  cambio el nombre de la partición a isos (opción c)

Finalmente, mostramos la tabla de particiones mediante la opción p:



Command (? for help): p
Disk /dev/sdb: 488397168 sectors, 232.9 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): CA68F231-D745-4BD7-A9E2-D3C53B7B63CB
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 488397134
Partitions will be aligned on 2048-sector boundaries
Total free space is 6042 sectors (3.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         8388641   4.0 GiB     0700
   2         8390656        16777249   4.0 GiB     0700
   3        16779264       488397134   224.9 GiB   0700  isos

Command (? for help):











Hemos modificado la tabla de particiones, pero todavía no hemos guardado los cambios en el disco.
Este es el último punto donde puedes echarte atrás sin modificar nada en el sistema.
Guardamos los cambios en el disco mediante la opcion w.

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed, possibly destroying your data? (Y/N): y
OK; writing new GUID partition table (GPT).
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot.
The operation has completed successfully.
[root@LAB ~]#


Como muestra el mensaje, se ha modificado la tabla de particiones, pero no será efectiva hasta que reiniciemos el sistema.

[root@LAB ~]# reboot

Broadcast message from root (pts/1) (Sun Apr  3 08:57:50 2016):

The system is going down for reboot NOW!
[root@LAB ~]#


Una vez reiniciado, lanzamos de nuevo gdisk /dev/sdb/ para verificar la tabla de particiones:

[root@LAB ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.6.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/sdb: 488397168 sectors, 232.9 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): CA68F231-D745-4BD7-A9E2-D3C53B7B63CB
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 488397134
Partitions will be aligned on 2048-sector boundaries
Total free space is 6042 sectors (3.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         8388641   4.0 GiB     0700
   2         8390656        16777249   4.0 GiB     0700
   3        16779264       488397134   224.9 GiB   0700  isos

Command (? for help):


El siguiente paso es utilizar este espacio como un storage repository en XenServer.

Para ello, formateamos la partición con el sistema de ficheros ext3:

[root@LAB ~]# mkfs.ext3 /dev/sdb3
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
29491200 inodes, 58952233 blocks
2947611 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
1800 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@LAB ~]#


Creamos un punto de montaje para la partición:

[root@LAB ~]# mkdir /mnt/isos
[root@LAB ~]#


Lo montamos:

[root@LAB ~]# mount -t ext3 /dev/sdb3 /mnt/isos/
[root@LAB ~]#


Este montaje sólo es válido hasta que reiniciemos el sistema. Para que el sistema monte la carpeta automáticamente durante el arranque, debemos añadirlo al fichero fstab:

[root@LAB ~]# echo "/dev/sdb3 /mnt/isos ext3 defaults 1 1" >> /etc/fstab
[root@LAB ~]#


El siguiente paso es hace que XenServer use esta carpeta como un storage repository.

Para ello:

[root@LAB ~]# xe-mount-iso-sr /mnt/isos/ -o bind
[root@LAB ~]#

El método de crear un SR mediante xe sr-create type=iso content-type=iso ... no funciona porque crea el SR en la partición de /boot, que sólo tiene 4GB. Ver xe sr-create, local ISO SR on larger drive, por ejemplo.
Al abrir XenCenter, aparece un nuevo SR con el nombre "Remote ISO Library on: /mnt/isos/". Podemos modificar el nombre del SR desde el propio XenCenter.

Ahora sólo tenemos que usar WinSCP -por ejemplo- para copiar ISOs a XenCenter.

Comentarios

Unknown ha dicho que…
Mil gracias!!! No te das una idea del tiempo que pasé buscando un post como el tuyo!!!! Gracias por compartilo.
Xavi Aznar ha dicho que…
@Lucas: De nada!! El objetivo del blog -que ahora tengo medio abandonado- es precisamente ése: ayudar a otros.

Un saludo,

Xavi
Raúl ha dicho que…
100.000 gracias!
Excelente.
Muy bien explicado y funcionó en mi XenServer 7.6.0 de laboratorio.
Tengo instalado el Xenserver en un disco de 500 GB y con ésto tengo más que suficiente para guardar mis ISO´s.
También he creado con otros 2 discos un raid 1 con mdadm y puse otro disco más como Spare.

Gracias y sigo con mi investigación.

Saludos.